package com.softtown.modules.organization.dao;

import com.softtown.common.dao.BaseDao;
import com.softtown.modules.organization.entity.CompOrgDeptEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @version v1.0
 * @ProjectName: softtown-aioffice
 * @ClassName: CompOrgDeptDao
 * @Description: 公司部门Dao层
 * @Author: fuming
 * @Date: 2019/6/4 16:55
 */
@Mapper
public interface CompOrgDeptDao extends BaseDao<CompOrgDeptEntity> {

    /**
     * 根据公司所属的ID查找出相对应的部门相关信息
     * @param companyId
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:08
     */
    List<CompOrgDeptEntity> getOrgListByCompId(Long companyId);

    /**
     * 根据公司所属的ID查找出相对应的部门相关信息
     * @param companyId
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:19
     */
    List<CompOrgDeptEntity> getOrgTreeByCompId(Long companyId);

    /**
     * 根据公司所属的ID查找出相对应的部门相关信息(树形数据)
     * @param companyId
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:32
     */
    List<CompOrgDeptEntity> getOrgTreeByCompIdAdd(Long companyId);

    /**
     * 部门修改
     * @param compOrgDeptEntity
     * @return boolean
     * @Author fuming
     * @Date 2020/5/26 15:33
     */
    boolean updateDeptInfos(CompOrgDeptEntity compOrgDeptEntity);

    /**
     * 根据id 获取信息
     *
     * @param id
     * @return
     * @author Dingyayong
     * @date 2019/6/23 13:38
     */
    CompOrgDeptEntity getById(Long id);

    /**
     * 根据部门ID来查询部门的信息
     * @param id
     * @return com.softtown.modules.organization.entity.CompOrgDeptEntity
     * @Author fuming
     * @Date 2020/5/26 15:33
     */
    CompOrgDeptEntity getDeptInfoById(Long id);

    /**
     * 通过pid 找出下级部门
     *
     * @param id
     * @return List
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    List<CompOrgDeptEntity> getDeptByPid(Long id);

    /**
     * 通过pid 和是否为预算部门找出下级部门
     *
     * @param id
     * @return List
     * @author Dingyayong
     * @date 2019/7/30 10:10
     */
    List<CompOrgDeptEntity> getDeptByPidAndBud(Long id);

    /**
     * 找出公司部门汇总
     * @param compId
     * @param period
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:34
     */
    List<CompOrgDeptEntity> getBudDeptSummary(@Param("compId") Long compId, @Param("period")String period);

    /**
     * 获取预算部门List
     * @param  companyId
     * @return List<CompOrgDeptEntity> getBudgetOrgByCompId
     * @author Dingyayong
     * @date 2019-08-23 11:11
     */
    List<CompOrgDeptEntity> getBudgetOrgByCompId(@Param("companyId") Long companyId);

    /**
     * 通过预算期间查询预算情况
     * @param compId
     * @param periodBegin
     * @param periodEnd
     * @param expItemId
     * @param deptId
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:34
     */
    List<CompOrgDeptEntity> getCensusCompareBranch(@Param("compId") Long compId,@Param("periodBegin")String periodBegin,@Param("periodEnd")String periodEnd,@Param("expItemId") Long expItemId,@Param("deptId") Long deptId);

    /**
     * 通过预算期间查询实际情况【审批通过】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:35
     */
    List<CompOrgDeptEntity> getCensusCompareBranchByActual(@Param("compId") Long compId,@Param("deptId") Long deptId,@Param("expItemId") Long expItemId,@Param("periodBegin")String periodBegin,@Param("periodEnd")String periodEnd);

    /**
     * 通过预算期间查询实际情况【费用已记账】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:35
     */
    List<CompOrgDeptEntity> getCensusCompareBranchByActualAndPost(@Param("compId") Long compId,@Param("deptId") Long deptId,@Param("expItemId") Long expItemId,@Param("periodBegin")String periodBegin,@Param("periodEnd")String periodEnd);

    /**
     * 通过预算期间查询实际情况【已支付】
     * @param compId
     * @param deptId
     * @param expItemId
     * @param periodBegin
     * @param periodEnd
     * @return java.util.List<com.softtown.modules.organization.entity.CompOrgDeptEntity>
     * @Author fuming
     * @Date 2020/5/26 15:35
     */
    List<CompOrgDeptEntity> getCensusCompareBranchByActualAndPayStatus(@Param("compId") Long compId,@Param("deptId") Long deptId,@Param("expItemId") Long expItemId,@Param("periodBegin")String periodBegin,@Param("periodEnd")String periodEnd);

    /**
     * 获取上级部门
     * @param id
     * @return
     */
    CompOrgDeptEntity getDeptPidName(Long id);

}
